package com.lac.component.redis;

import org.redisson.api.RBloomFilter;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @author xiaokuixiao
 * date 2025/7/3 13:52
 */
@Component
public class RedisBloomFilterExample {
    
    @Autowired
    private RedissonClient redissonClient;

    public void redisBloomFilter() {
        try {
            // 使用注入的 RedissonClient
            RBloomFilter<String> bloomFilter = redissonClient.getBloomFilter("myBloom");

            // 初始化布隆过滤器
            long expectedInsertions = 100_000_000L; // 预计插入元素数量
            double falseProbability = 0.001; // 期望的误报率
            bloomFilter.tryInit(expectedInsertions, falseProbability);

            // 添加元素
            bloomFilter.add("element1");
            bloomFilter.add("element2");

            // 查询元素是否存在
            boolean mightContainElement1 = bloomFilter.contains("element1");
            boolean mightContainNonExistent = bloomFilter.contains("nonexistentElement");

//            System.out.println("element1 是否可能存在于集合中: " + mightContainElement1);
//            System.out.println("不存在的元素是否肯定不在集合中: " + !mightContainNonExistent);

            // 获取布隆过滤器的信息
//            System.out.println("布隆过滤器的大小（位数）: " + bloomFilter.getSize());
//            System.out.println("布隆过滤器的误报率: " + bloomFilter.getFalseProbability());
//            System.out.println("当前已插入元素数量: " + bloomFilter.count());
//            System.out.println("布隆过滤器的状态: " + (bloomFilter.isExists() ? "存在" : "不存在"));
        } catch (Exception e) {
//            System.err.println("Redisson初始化或使用过程中出现异常：" + e.getMessage());
        }
    }
}